/**
 * @file sequential_stack.h
 * @brief 顺序栈头文件
 * @author Xavier ZXY (zxy_xavier@163.com)
 * @version : 1.0
 * @date 2022-04-24 02:14
 * 
 */

#define OK 1
#define ERROR 0
#define TRUE 1
#define FALSE 0
#define MAXSIZE 20 /* 存储空间初始分配量 */

typedef int Status;
typedef int SElemType;

/**
 * @brief 顺序栈结构
 */
typedef struct
{
    SElemType data[MAXSIZE];
    int top;  //栈顶指针
}SqStack;

//显示元素
Status visit(SElemType c);

//初始化空栈
Status InitStack(SqStack *S);

//把S置为空栈
Status ClearStack(SqStack *S);

//判断栈是否为空栈
Status StackIsEmpty(SqStack S);

//返回S的元素个数，即栈的长度
int StackLength(SqStack S);

//返回栈顶元素
Status GetTop(SqStack S, SElemType *e);

//向S中插入新的栈顶元素
Status Push(SqStack *S, SElemType e);

//弹出栈顶元素保留到e
Status Pop(SqStack *S, SElemType *e);

//查看栈中的所有元素
Status StackTraverse(SqStack S);